package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 锁仓订单实体类，用于管理用户参与的锁仓活动详情。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "locked_order")
public class LockedOrder {

    /**
     * 订单ID，自增长主键。
     */
    @ApiModelProperty(value = "锁仓订单ID", example = "1")
    private Long id;

    /**
     * 活动图片，用于展示锁仓活动的图片链接。
     */
    @ApiModelProperty(value = "活动图片链接", example = "http://example.com/activity.jpg")
    private String image;

    /**
     * 活动名称，锁仓活动的标题。
     */
    @ApiModelProperty(value = "活动名称", example = "春节锁仓计划")
    private String title;

    /**
     * 领取人ID，参与锁仓活动的用户ID。
     */
    @ApiModelProperty(value = "领取人ID", example = "10001")
    private Long memberId;

    /**
     * 活动ID，锁仓活动的唯一标识。
     */
    @ApiModelProperty(value = "活动ID", example = "20230101")
    private Long activityId;

    /**
     * 锁仓释放周期，定义释放资金的时间单位。
     * 0：每日，1：每周，2：每月，3：每年。
     */
    @ApiModelProperty(value = "锁仓释放周期", allowableValues = "0,1,2,3", example = "1")
    private int period = 0;

    /**
     * 锁仓状态，当前锁仓订单的状态。
     * 0：待释放，1：释放中，2：已结束。
     */
    @ApiModelProperty(value = "锁仓状态", allowableValues = "0,1,2", example = "0")
    private int lockedStatus = 0;

    /**
     * 持续周期，锁仓的总周期数。
     */
    @ApiModelProperty(value = "持续周期数", example = "30")
    private int lockedDays;

    /**
     * 已释放周期，已经完成的释放周期数。
     */
    @ApiModelProperty(value = "已释放周期数", example = "15")
    private int releasedDays;

    /**
     * 释放币种，锁仓释放的币种标识。
     */
    @ApiModelProperty(value = "释放币种", example = "BTC")
    private String releaseUnit;

    /**
     * 总锁仓金额，用户投入的总金额。
     */
    @ApiModelProperty(value = "总锁仓金额", example = "1000.00000000")
    private BigDecimal totalLocked = BigDecimal.ZERO;

    /**
     * 锁仓释放类型，定义释放资金的方式。
     * 0：等额释放，1：等比释放。
     */
    @ApiModelProperty(value = "锁仓释放类型", allowableValues = "0,1", example = "0")
    private int releaseType = 0;

    /**
     * 原始释放比例，初始设定的释放比例。
     */
    @ApiModelProperty(value = "原始释放比例", example = "0.05")
    private BigDecimal releasePercent = BigDecimal.ZERO;

    /**
     * 当前释放比例，当前周期的释放比例。
     */
    @ApiModelProperty(value = "当前释放比例", example = "0.06")
    private BigDecimal releaseCurrentpercent = BigDecimal.ZERO;

    /**
     * 释放倍数，释放资金的倍数调整。
     */
    @ApiModelProperty(value = "释放倍数", example = "1.2")
    private BigDecimal releaseTimes = BigDecimal.ZERO;

    /**
     * 原始周期释放总量，按照原始释放比例计算的周期释放量。
     */
    @ApiModelProperty(value = "原始周期释放总量", example = "50.00000000")
    private BigDecimal originReleaseamount = BigDecimal.ZERO;

    /**
     * 当前周期释放量，当前周期实际释放的资金量。
     */
    @ApiModelProperty(value = "当前周期释放量", example = "55.00000000")
    private BigDecimal currentReleaseamount = BigDecimal.ZERO;

    /**
     * 总释放量，累计已经释放的资金总额。
     */
    @ApiModelProperty(value = "总释放量", example = "250.00000000")
    private BigDecimal totalRelease = BigDecimal.ZERO;

    /**
     * 邀请好友产能增加百分比，因邀请好友而增加的产能比例。
     */
    @ApiModelProperty(value = "邀请好友产能增加百分比", example = "0.03")
    private BigDecimal lockedInvite = BigDecimal.ZERO;

    /**
     * 产能增加上限百分比，产能增加的最高限制。
     */
    @ApiModelProperty(value = "产能增加上限百分比", example = "0.1")
    private BigDecimal lockedInvitelimit = BigDecimal.ZERO;

    /**
     * 结束日期，锁仓活动的结束时间。
     */
    @ApiModelProperty(value = "结束日期", example = "2023-12-31 23:59:59")
    private Date endTime;

    /**
     * 创建时间，锁仓订单的创建时间。
     */
    @ApiModelProperty(value = "创建时间", example = "2023-01-01 12:00:00")
    private Date createTime;
}

